[AWS] Amazon SNS の新機能「Mobile Push」を iOS で使ってみた
Amazon SNS Mobile Push
以下の画像をご覧ください。キタコレ!
がしかし、諏訪くんに先を超されてしまいしたw。こちらでは、Amazon SNSを使ってApple iOS端末にプッシュ通知したいと思います。Androidな方は以下の記事をご覧ください。
[AWS] Amazon SNS の新機能「Mobile Push」を Android で使ってみた
Apple Push Notification Services(APNS)
APNSは、Appleが管理するiOS端末宛のプッシュ通知サービスです。今まで、このプッシュ通知を使うためには、BaaSや自前での構築が必要でしたが、今回の新機能によってAWSがやってくれるんですね!本記事では、Amazon SNSからMobile Pushを使ってAPNS経由でiOS端末に通知をすることができることをご紹介したいと思います。
プッシュ通知用の証明書作成
APNSを利用するためには、まずは証明書周りを揃える必要があります。今回は、実機を使ってテストをしますので、Apple Developer Programsに加入してください。そして、ポータルからAPNS用の証明書を作成します。まず、はじめに証明書リクエストファイルを作成します。
キーチェーンアクセスを開いて、証明書アシスタントから認証局に証明書を要求します。CertificateSigningRequest.certSigningRequestというファイルが出来上がりますね。次に、ポータルからAPNS用に証明書リクエストファイルをアップロードして、アプリケーションIDを作成して、デバイスを登録して、プロビジョニングファイルを作成します。説明を省略し過ぎですねっっw
ポータルトップ
証明書作成
アプリケーションID作成。APNS用はワイルドカード指定しないように気をつけましょう。ハマります。
iOSデバイスを登録します。今回は開発機で使うので登録する必要があります。
プロビジョニングファイルを作成してダウンロードします。
これで下準備ができましたね。
プッシュ通知を受け取るiOSアプリを作成する
ここからは、Objective-Cです。
// // AppDelegate.m // SNSApp // // Created by satoshi on 2013/08/14. // Copyright (c) 2013年 satoshi. All rights reserved. // #import "AppDelegate.h" @implementation AppDelegate @synthesize window; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"Registering for push notifications..."); [[UIApplication sharedApplication]registerForRemoteNotificationTypes: (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken]; NSLog(@"%@",str); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSString *str = [NSString stringWithFormat: @"Error: %@", err]; NSLog(@"%@",str); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"ReceiveRemoteNotification on foreground: %@", userInfo); [UIApplication sharedApplication].applicationIconBadgeNumber = 2; } - (void)applicationDidBecomeActive:(UIApplication *)application { [UIApplication sharedApplication].applicationIconBadgeNumber = 1; } @end
簡単に解説しますと、アプリ起動時にdidFinishLaunchingWithOptionsが呼ばれます。そこで、プッシュ通知を受け取るか確認画面が初回だけ出ます。問題なければ次にdidRegisterForRemoteNotificationsWithDeviceTokenが呼ばれます。ここで、デバイスとAPNSを繋ぐユニークなIDが発行されます。これは、Amazon SNSから特定のiOSデバイスにプッシュ通知するために必要なもので、通常はサーバーサイドにPOSTしてデータベースなどに登録しておきます。今回は後でコピペして使います。
それでは、実機を使ってアプリを実行してみましょう。Device Tokenのところに文字が並んでいますね。これがデバイスとAPNSを繋ぐIDです。 テキストをコピーしておいてください。後で、括弧とスペースを除いた文字列を使います。
2013-08-14 05:14:30.138 SNSApp[1616:907] Registering for push notifications... 2013-08-14 05:14:30.155 SNSApp[1616:907] Device Token=<XXXXXXXX YYYYYYYY ZZZZZZZZ AAAAAAAA BBBBBBBB CCCCCCCC 1f34cd15 9983d2ef>
Amazon SNSからプッシュ通知する
さて、メインディッシュです。AWS管理コンソールをご覧ください。Amazon SNSのUIが変わっていますね。今まではTopicの作成のみでしたが、今回からAppの作成ができるようになっています。そして、証明書のアップロードをしています。ここでのポイントとして、p12形式で出力したものをアップロードしつつ設定したパスワードを入力することです。
次にプッシュ通知先アプリのエンドポイントを登録します。先ほどコピーしたDevice Tokenの文字列をペーストしてください。
うまくいけば以下のように登録されます。
それでは、プッシュ通知をするために、Publishボタンを押します。そして、メッセージを入力しましょう。iOSのAPNSは、特定のJSONフォーマットで送ることでポップアップ表示してくれます。まずはテキストでメッセージを入れた後に、2つ目のラジオボタンを選択してJSON形式に変換してください。
動作確認
最後に動作確認です。こんか感じで表示されれば成功ですね。
良い感じですね!!
まとめ
Amazon SNS Mobile Push機能を使うことで、Apple iOS端末向けにプッシュ通知を行うことが出来ました!Objective-Cのコードは、そのまま全て使い回すことができるもので、AWSならではのコードは一切ありません。ぜひお試しください。
参考資料
Amazon Simple Notification Service Developer Guide - Getting Started with APNS
Apple Push Notification Services in iOS 6 Tutorial: Part 1/2